Pętla 1 kHz, FOC i ros2_control: Jak projektować sterowanie momentowe (Torque Control) w robotach nowej generacji

Pętla 1 kHz, FOC i ros2_control: Jak projektować sterowanie momentowe (Torque Control) w robotach nowej generacji
Inżynieryjne ujęcie przejścia ze sztywnej pętli pozycyjnej na bezposrednie sterowanie prądowe i podatność aktywną (Active Compliance) w stawkach robotycznych.
1. Matematyczne Podstawy FOC w Sterowaniu Prądowym
W silnikach bezszczotkowych (BLDC/PMSM) moment obrotowy $\tau$ jest bezpośrednio powiązany ze składową kwadraturową prądu stojana $I_q$. Warunkiem koniecznym do wdrożenia sterowania momentowego jest kaskadowa struktura regulatora, w której nadrzędny sterownik wyznacza wartość zadana prądu, a wewnętrzna pętla FOC (Field-Oriented Control) realizuje przekształcenia Clarka i Parka z częstotliwością od 10 kHz do 20 kHz na poziomie mikrokontrolera napędu.
Przy tradycyjnym sterowaniu pozycją uchyb $\theta_{err} = \theta_{cmd} – \theta_{act}$ generuje za pośrednictwem regulatora PID maksymalną odpowiedź napięciową, co przy zablokowaniu wału prowadzi do wysycenia prądowego (wind-up) i niekontrolowanego wzrostu siły. W sterowaniu momentowym ograniczenie wartości $I_q$ wyznacza fizyczny limit siły, jaką staw robota może wywrzeć na otoczenie.
2. Architektura Interfejsu w ros2_control
Stos ros2_control izoluje algorytmy planowania trajektorii od warstwy fizycznej sprzętu. W przypadku sterowania momentowego kluczowe jest zdefiniowanie odpowiednich zasobów w pliku konfiguracji URDF/Xacro oraz zaimplementowanie klasy dziedziczącej po hardware_interface::SystemInterface.
Kluczowym wymogiem wydajnościowym wewnątrz metod read() oraz write() jest całkowity zakaz dynamicznej alokacji pamięci (malloc, tworzenie instancji obiektów std::string czy alokowanie wektorów). Każda alokacja w czasie wykonywania może wywołać wywłaszczenie wątku przez alokator systemowy OS i naruszyć rygor rzędu 1 ms.
3. Determinacja Czasowa: Konfiguracja Linux PREEMPT_RT
Standardowy planista zadań systemu Linux (CFS) nie gwarantuje przewidywalności czasowej wymaganej przez pętlę 1 kHz. Wdrożenie wymaga kompilacji jądra z łatą CONFIG_PREEMPT_RT=y oraz odpowiedniego odizolowania rdzeni procesora na potrzeby wątków sterowania.
- Priorytet SCHED_FIFO: Ustawienie polityki szeregowania na
SCHED_FIFOz priorytetem w zakreśsie 80–98. - CPU Affinity: Przypisanie wątku
ros2_controldo wyizolowanego rdzenia CPU (wyłączonego z planisty komendą bootloader `isolcpus`). - Blokada Pamięci (mlockall): Wywołanie
mlockall(MCL_CURRENT | MCL_FUTURE)w celu zapobiegania zjawisku zrzucania stron pamięci RAM do przestrzeni SWAP (Page Faults).
- ROS 2 Documentation: ros2_control: A generic and modular control framework for ROS 2 (ros-controls.github.io).
- IEEE Transactions on Robotics: Hogan, N. (1985). Impedance Control: An Approach to Manipulation. Part I–III. Journal of Dynamic Systems, Measurement, and Control.
- EtherCAT Technology Group: ETG.6010 Implementation Guideline for CiA 402 Drive Profile.
- Linux Foundation: REAL-TIME Linux Wiki & PREEMPT_RT Patch documentation (wiki.linuxfoundation.org/realtime).




